package frame.laxcen.loop.demo;

import frame.laxcen.loop.BaseLoopReader;
import frame.util.ByteArrayUtil;
import frame.util.ByteUtil;
import frame.util.Ref;

public class LooperReader_Demo_1 extends BaseLoopReader {

    @Override
    protected String loop(Ref<String> pc) {

        switch(pc.get()) {

            case "loop-begin":

                readU8("FrameHeader", ByteArrayUtil::toHexString);
                readU16("ControlWord", ByteArrayUtil::toHexString);
                readU16("DataLength", (bs) -> "" + ByteUtil.byteArrayToInt(bs));

            case "pid":

                // 偷懒的循环写法
                // 有的时候不需要 Demo_1 中那种复杂的循环写法 只要理解 loop 执行的过程就可以自己定制

                if(readP16("Pid1", (byte) 0x01, (bs) -> "" + ByteUtil.byteArrayToInt(bs)))
                    return pc.swap("pid-loop-body").get();

                if(readP16("Pid2", (byte) 0x02, (bs) -> "" + ByteUtil.byteArrayToInt(bs)))
                    return pc.swap("pid-loop-body").get();
        }

        return pc.swap("loop-end").get();
    }
}
